<%@ page language="java" contentType="text/html;charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ page import="com.hzqy.web.login.SessionKey"%>
<%@ page import="com.hzqy.web.vo.PmsOrgVo"%>
<%@ page import="com.hzqy.commons.utils.SystemConfigUtils" %> 

<%@ include file="../../commons/commons.jsp"%>
<%@ include file="../../commons/common_css_js.jsp" %>

<%


//------------------------------------------- 必要参数(无需传入, 来自公共页或session) START-------------------------------------------

//组织id
PmsOrgVo __fs_pmsorgvo = (PmsOrgVo)session.getAttribute(SessionKey.SESSION_USER_FOR_ORG_INFO);
int __fs_orgId = __fs_pmsorgvo == null ? 0 : __fs_pmsorgvo.getF_po_id();


//内容id 当前正在播放的内容，如初次进入有强切计划的界面，获取到空的内容ID，在取到强切强切计划后会立刻跳转。
//跳转后的界面如也引用了强切计划组件，可实现连续强切
String __fs_contentId = request.getParameter("contentId");


//------------------------------------------- 必要参数(无需传入) END-------------------------------------------







//--------------------------------------------- 可选传入参数 START---------------------------------------------

//相对路径前缀 '../' 的个数 不传默认 为4
//会影响industry/behaviorControl/forced_switching_by_serverid.do的请求路径，引入强切功能后请观察该请求是否成功发起，
//如无法请求请确认请求路径层级是否正确
String __fs_relative_prefix_count = request.getParameter("relative_prefix_count");

//是否自动以默认配置初始化插件，如需自定义并手工初始化，请传入false
String __fs_config_auto_init = request.getParameter("__fs_config_auto_init");

//iframe的id，强切视频、频道、图文将展示在iframe中
String __fs_iframe_id = request.getParameter("__fs_iframe_id");

//--------------------------------------------- 可选传入参数 END---------------------------------------------



%>

<div id="__fs_test" style="position: absolute; left: 10px; top: 10px; font-size: 18px; font-weight: bold; color: red; z-index: 100000; display: none;"></div>

<script type="text/javascript">
	"use strict";

	(function(){
		
		/**
		 *
		 * 强切计划插件
		 * 
		 * 初始化：
		 * 		1. 默认自动初始化，如需自定义一些参数或特殊情况下，可传入__fs_config_auto_init = false以禁用自动初始化功能
		 * 		2. 如设定手动初始化，插件会注册initForcedSwitching(options);方法至全局中, 调用该方法以完成初始化。
		 * 		3. 参数options可传参数和传入方法参考内部代码 var _option 对象.
		 * 
		 * 强切操作现支持三类：视频强切content_type = 2，图文强切 content_type = 3，频道强切content_type = 4
		 * 		1.三种类型的内容分别跳转不同页面，跳转方式参考内部代码 var _option对象中的fnSwitchVideo、fnSwitchImageAndText、fnSwitchChannel方法
		 *		2.其余类型的默认情况不做任何操作，可手工传入 fnSwitchDefault方法自定义跳转方式
		 * 
		 * 
		 * 
		 * 
		 * 
		 * 
		 * 
		 * 
		*/
		var initForcedSwitching = function(options) {
			
			//default配置
			var _option = {
				debug :                        false, //用于调试输出日志
				webIp :                        '<%=cloudTwoPlaneUrl%>', //二平面地址
				serverid :                     '<%=serverid%>', //业务账号，直接取自session
				orgId :                        '<%=__fs_orgId%>', //组织id，直接取自session
				currentContentId :             '<%=__fs_contentId%>', //当前播放的节目id
				currentContentIds:			   '',
				timeSpan :                     10, //单位秒(sec)  获取 （当前时间 + timeSpan） 时间前的计划
				
				queryInterval :                60, //单位秒(sec)  轮训查询计划的时间间隔
				nextScheduleTimeout :          null, //定时器对象
				
				relativePathPrefix :           '../../../../', //ajax请求中的relativePathPrefix参数, 按需修改
				relativePathPrefixCount :      '<%=__fs_relative_prefix_count%>',
				
				switchingOnInit :              true, //初始化时是否立刻执行一次强切
				isSetFourColorKeyOnInit :        true, //初始化时是否执行4色键初始化
				
				forced_switching_type :        'iframe', //强切切换类型，可取'iframe' 、 'jump', iframe为不跳转， jump为跳转。
				defaultIframeId :              'ifram',//默认iframe的id，如需自定义，请修改iframeId配置
				iframeId :                     '<%=__fs_iframe_id%>', //强切使用的iframe的id
				iframeObj :                    null, // iframe dom节点，自动生成，请勿传入
				
				fnSwitchOff :                  function(_config, contentId) {}, //当前节目需要关闭时触发, 暂时无用
				fnSwitchVideo :                function(_config, contentId, contentCode) {   //视频强切操作
					var _url = _config.relativePathPrefix + "industry/play/play_transfer.jsp?contentid=" + contentId + "&contentType=1";
					_config.fnShowPage(_config, _url);
				},
				fnSwitchImageAndText :         function(_config, contentId) {   //图文强切操作
					var _url = _config.relativePathPrefix + "industry/commons/qiangqie_img.jsp?contentid=" + contentId;
					_config.fnShowPage(_config, _url);
				},
				fnSwitchChannel :              function(_config, contentId, contentCode) {   //频道强切操作
					var _url = _config.relativePathPrefix + "industry/play/play_transfer.jsp?contentid=" + contentId + "&contentType=1&disableEvent=3";
					_config.fnShowPage(_config, _url);
				},
				fnOrderVideoPlayChannel :              function(_config, contentIds) {   //轮播强切操作
					var _url = _config.relativePathPrefix + "industry/play/play_transfer.jsp?contentid=" + contentIds + "&contentType=6";
					_config.fnShowPage(_config, _url);
				},
				fnSwitchDefault :              function(_config, contentId) {}, //其他类型强切操作，默认无操作
				//fnFoundSwitching :             function(json) {}, //有强切计划触发
				
				// 1.初始化时 如请求不到可用的强切计划 会触发一次，后续如持续请求不到，不触发
				// 2.如当前已进入强切视频、频道、图文, 出现请求不到可用的强切计划的情况下 会触发一次，后续如持续请求不到，不触发
				fnHasNotFoundSwitching :       function(_config) {  //进入 无强切计划状态时 触发，请传入覆盖，或者覆盖notFoundSwitchingUrl参数
					if(_Util.isNotEmpty(_config.notFoundSwitchingUrl)) {
						_config.fnShowPage(_config, _config.notFoundSwitchingUrl);
					}
				}, 
				//notFoundSwitchingUrl :         '<%=cloudTwoPlaneUrl%>index/index_industry.jsp?epg_info=<%=epg_info%>', // fnHasNotFoundSwitching()中使用
				notFoundSwitchingUrl :         'index_r.jsp', // fnHasNotFoundSwitching()中使用
						
				fnShowPage :                       function(_config, _url) { //发起强切切换，显示对应界面
					if(_config.forced_switching_type == 'iframe') {
						_config.iframeObj.src = _url;
					} else if(_config.forced_switching_type == 'jump') {
						window.location.href = _url;
					}
				},
				
				
				fnInitFourColorKey :          function(_config) {
					try {
						var epg_info = "<%=epg_info%>";
						Authentication.CTCSetConfig('ServiceEntry','URL="' + _config.webIp + 'index/index_industry.jsp?epg_info= '+epg_info+'",HotKey="275",Desc="Red"');
						Authentication.CTCSetConfig('ServiceEntry','URL="' + _config.webIp + 'index/index_industry.jsp?epg_info= '+epg_info+'",HotKey="276",Desc="Green"');
						Authentication.CTCSetConfig('ServiceEntry','URL="' + _config.webIp + 'index/index_industry.jsp?epg_info= '+epg_info+'",HotKey="277",Desc="Yellow"');
						Authentication.CTCSetConfig('ServiceEntry','URL="' + _config.webIp + 'index/index_industry.jsp?epg_info= '+epg_info+'",HotKey="278",Desc="Blue"');
					}catch(e) {}
				}
				
			};
			
			
			var _Util = {
				extend : function(obj1, obj2) {
					for(var key in obj2) {
						obj1[key] = obj2[key];
					}
				},
				isNotEmpty : function(str) {
					return str && str != 'null';
				},
				isEmpty : function(str) {
					return ! this.isNotEmpty(str);
				} 
			};
			
			var Fun = {
				
				//初始化总入口
				init : function(_config) {
					Fun.processConfig(_config);
					if(Fun.checkConfig(_config)) {
						Fun.startNextScheduleInterval(_config);
					}
					
					Fun.pressEventOnPlay(_config);
					
					//初始化四色键
					if(_config.isSetFourColorKeyOnInit) {
						_config.fnInitFourColorKey(_config);
					}
					
				},
				
				test : function(txt) {
					document.getElementById("__fs_test").style.display = "block";
					document.getElementById("__fs_test").innerHTML += txt + " | ";
				},
				
				//播放时事件传入
				pressEventOnPlay : function(_config) {
					var grabEvent = function(evt) {
						var keycode = event.which ? event.which : event.keyCode;
						if(_config.iframeObj){
							if(window[_config.iframeId] && window[_config.iframeId].checkMvKey){
								window[_config.iframeId].checkMvKey(keycode);
							}else if(_config.iframeObj.contentWindow && _config.iframeObj.contentWindow.checkMvKey){
								_config.iframeObj.contentWindow.checkMvKey(keycode);
							}
						}
					}
					
					var preOnkeypress = document.onkeypress;
					document.onkeypress = function(evt){
						grabEvent(evt);
						if(preOnkeypress) {
							preOnkeypress(evt);
						}
					};
					
					var preOnirkeypress = document.onirkeypress;
					document.onirkeypress = function(evt){
						grabEvent(evt);
						if(preOnirkeypress) {
							preOnirkeypress(evt);
						}
					};
				},
				
				
				//处理配置
				processConfig : function(_config) {
					Fun.generateRelativePathPrefix(_config);
					
					if(_Util.isEmpty(_config.iframeId)) {
						_config.iframeId = _config.defaultIframeId;
					}
					
					_config.iframeObj = document.getElementById(_config.iframeId);
				},
				
				//生成相对路径前缀
				generateRelativePathPrefix : function(_config) {
					if(_Util.isNotEmpty(_config.relativePathPrefixCount)) {
						var count = parseInt(_config.relativePathPrefixCount);
						var prefix = "";
						for(var i = 1; i <= count; i ++) {
							prefix += "../";
						}
						_config.relativePathPrefix = prefix;
					}
				},
				
				
				//检查一些必要参数是否缺失或者有误
				checkConfig : function(_config) {
					if(_Util.isEmpty(_config.serverid)) {
						return false;
					}
					
					if(_Util.isEmpty(_config.orgId)) {
						return false;
					} 
					
					return true;
				},
				
				//开启轮训获取下步计划定时器
				startNextScheduleInterval : function(_config) {
					if(_config.nextScheduleTimeout != null) {
						try{
							clearTimeout(_config.nextScheduleTimeout);
						}catch(e){}
						_config.nextScheduleTimeout = null;
					}
					
					if(_config.switchingOnInit) {
						Fun.getNextSchedule(_config, false);
					}
					
					_config.nextScheduleTimeout = setTimeout(Fun.getNextSchedule, _config.queryInterval * 1000, _config, true);
					
				},
				
				//获取下一步可执行的计划
				getNextSchedule : function(_config, continueLoop) {
					
					Fun.forcedSwitchingByServerid(
							_config.relativePathPrefix, 
							{
								orgId : _config.orgId,
								serverid : _config.serverid,
								timeSpan : _config.timeSpan
							}, 
							function(__xmlhttp){
								var json = Josncheck(__xmlhttp.responseText);
								//console.log(json);
								
								if(json.hasNextSchedulesVo) {
									//_config.fnFoundSwitching(json);
									if(_config.currentContentId != json.schedulesVo.f_is_contentId) {
										_config.currentContentId = json.schedulesVo.f_is_contentId;
										Fun.switchToContent(_config, json.schedulesVo);
									} else {
										//查出相同id，则无需切换，继续播放当前节目
									}
								} else {
									//查不到执行无计划处理，默认无操作, 正在播放的节目由对应展示的界面自行处理。
									if(_config.currentContentId != 'unscheduled') {
										_config.currentContentId = 'unscheduled';
										_config.fnHasNotFoundSwitching(_config);
									}
								}
								
								
								if(continueLoop) {
									_config.nextScheduleTimeout = setTimeout(Fun.getNextSchedule, _config.queryInterval * 1000, _config, continueLoop);
								}/*  else {
									_config.nextScheduleTimeout = null;
								} */
							}
					);
					
				},
				
				
				forcedSwitchingByServerid : function(relativePathPrefix, params, callback){
					var url = relativePathPrefix+"industry/behaviorControl/forced_switching_by_serverid.do?orgId="+params.orgId+"&serverid="+params.serverid+"&timeSpan="+params.timeSpan;
					var ajax = new AJAX_OBJ(url, callback);
					ajax.requestData();
				},
				
				
				//强切至节目上
				switchToContent : function(_config, _schedulesVo) {
					var _contentId = _schedulesVo.f_is_contentId;
					
					switch(_schedulesVo.f_is_type) {
						case 1: //视频强切
						case 2: //图文强切
						case 3: //频道强切
							//三种情况按照内容类型确认强切方式，而不是用强切计划的强切类型。
							switch(_schedulesVo.content_type) {
								case 2: //电影
									_config.fnSwitchVideo(_config, _contentId, _schedulesVo.content_code);
									break;
								case 3: //频道
									_config.fnSwitchChannel(_config, _contentId, _schedulesVo.content_code);
									break;
								case 4: //图文
									_config.fnSwitchImageAndText(_config, _contentId);
									break;
								default: 
									_config.fnSwitchDefault(_config, _contentId);
									break;
							}
							break;
							
						case 4: //轮播强切
							if(_config.currentContentIds != _schedulesVo.contentIds) {
								_config.currentContentIds = _schedulesVo.contentIds;
								_config.fnOrderVideoPlayChannel(_config, _schedulesVo.contentIds);
							}else{//强切轮播计划相同不进行刷新
								
							}
							break;
						default: 
							break;
					}
					
				},
				
				//强切出节目 暂时无用
				switchOffContent : function(_config, contentId) {
					_config.currentContentId = 0;
					_config.fnSwitchOff(_config, contentId);
				},
				
				
			};
			
			
			_Util.extend(_option, options ? options : {});
			Fun.init(_option);
			
			//console.log(_option);
		};
		
		
		// 可传参数决定是否自动初始化插件，在无特殊情况下，使用自动初始化，引入页面后无需显式调用初始化方法
		var __fs_config_auto_init = '<%=__fs_config_auto_init%>';
		
		if(__fs_config_auto_init == "false") {
			window.initForcedSwitching = initForcedSwitching;
		} else {
			//单元测试
			//initForcedSwitching({debug : true, orgId: 105, serverid : "0571000201", timeSpan : 10, queryInterval : 2});
			
			//测试环境
			//initForcedSwitching({timeSpan : 3600, queryInterval : 2});
			
			//正式环境
			initForcedSwitching();
		}
		
	})();
	

</script>